package com.basin.micro.auth.module.menu.pojo.vo;

import com.basin.common.core.node.BasinTreeNode;
import com.basin.micro.auth.module.menu.pojo.dto.MenuDTO;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author: Sam ZHONG | sammy1997@aliyun.com
 */
public class MenuTreeVO extends BasinTreeNode<MenuDTO> {
    public MenuTreeVO(MenuDTO rootNode) {
        super(rootNode);
    }

    /**
     * 树结构菜单数据集构建
     *
     * @param menuEntityList 菜单列表
     * @return 树化数据集
     */
    public static List<MenuTreeVO> build(List<MenuDTO> menuEntityList) {
        Map<String, MenuTreeVO> nodeMap = new HashMap<>();
        List<MenuTreeVO> rootNodes = new ArrayList<>();

        // 初始化节点映射
        for (MenuDTO menuDTO : menuEntityList) {
            nodeMap.put(menuDTO.getMenuCode(), new MenuTreeVO(menuDTO));
        }

        // 构建树
        for (MenuDTO menuDTO : menuEntityList) {
            MenuTreeVO currentNode = nodeMap.get(menuDTO.getMenuCode());
            if (menuDTO.getParentCode() == null || menuDTO.getParentCode().isEmpty()) {
                // 根节点
                rootNodes.add(currentNode);
            } else {
                // 找到父节点并添加当前节点作为子节点
                MenuTreeVO parentNode = nodeMap.get(menuDTO.getParentCode());
                if (parentNode != null) {
                    parentNode.addChild(currentNode);
                }
            }
        }

        return rootNodes;
    }
}
